
#ifndef VNS_VNSMOBILITY_H
#define VNS_VNSMOBILITY_H

#include <BaseMobility.h>

namespace vns {
	class Vehicle;
}

class VNSMobility : public BaseMobility
{
  private:
    /** @name parameters to handle the movement of the host*/
    vns::Vehicle* vehicle;


  public:
    virtual void update();

    //Module_Class_Members( VNSMobility, BaseMobility, 0 );

    /** @brief Initializes mobility model parameters.*/
    virtual void initialize(int);
    virtual void finish();

    /** @brief Internal use only */
    void setVehicle(vns::Vehicle* veh);

    inline vns::Vehicle* getVehicle(){ return vehicle; };

    /** @brief Returns the current position at the current simulation time. */
    virtual Coord getCurrentPosition(/*simtime_t_cref stWhen = simTime()*/) const;

    /** @brief Returns the current speed at the current simulation time. */
    virtual Coord getCurrentSpeed() const;


  protected:
    /** @brief Calculate the target position to move to (Does nothing)*/
    virtual void setTargetPosition();

    /** @brief Move the host (Does nothing) */
    virtual void makeMove();

    //    void fixIfHostGetsOutside();
};

#endif
